package com.cke.yang.preview.domain.strategy.impl;

import com.cke.yang.common.infra.utils.FileUtils;
import com.cke.yang.preview.domain.model.PreviewLink;
import com.cke.yang.preview.domain.model.PreviewLinkWrapper;
import com.cke.yang.preview.domain.strategy.ExchangeLinkStrategy;
import com.cke.yang.preview.infra.enums.ExchangeLinkModeEnum;
import com.cke.yang.preview.infra.enums.PreviewPagePathEnum;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.HashMap;

@Component
public class ExchangeLinkDefaultStrategy implements ExchangeLinkStrategy {

    private static final HashMap<String, PreviewPagePathEnum> FILE_TYPE_REF_PROCESSOR_MAP = new HashMap<>();

    @Override
    public boolean supports(ExchangeLinkModeEnum modeEnum) {
        return ExchangeLinkModeEnum.DEFAULT.equals(modeEnum);
    }

    @Override
    public PreviewLinkWrapper exchangeLink(String keyStr) {
        // 构造一个返回对象
        PreviewLinkWrapper prevWrapper = new PreviewLinkWrapper();
        // 从文件链接里解析出文件类型
        String fileType = FileUtils.getFileTypeFromUrl(keyStr);
        if (FILE_TYPE_REF_PROCESSOR_MAP.containsKey(fileType)) {
            PreviewPagePathEnum processorEnum = FILE_TYPE_REF_PROCESSOR_MAP.get(fileType);
            prevWrapper.setPagePath(processorEnum.getPath());
        } else {
            return PreviewLinkWrapper.error(String.format("无法处理此文件类型，处理器：ExchangeLinkDefaultStrategy，文件类型：%s", fileType));
        }
        // 构建一个简单的直接的文件链接列表
        PreviewLink link = new PreviewLink();
        link.setFileName(FileUtils.getFileNameFromUrl(keyStr));
        link.setFileUrl(keyStr);
        prevWrapper.setFileList(Collections.singletonList(link));
        return prevWrapper;
    }

    static {
        FILE_TYPE_REF_PROCESSOR_MAP.put("pdf", PreviewPagePathEnum.PDF_JS);
        FILE_TYPE_REF_PROCESSOR_MAP.put("jpg", PreviewPagePathEnum.JPG_IMG);
        FILE_TYPE_REF_PROCESSOR_MAP.put("png", PreviewPagePathEnum.JPG_IMG);
        FILE_TYPE_REF_PROCESSOR_MAP.put("jpeg", PreviewPagePathEnum.JPG_IMG);
    }

}
